# -*- coding: utf-8 -*-
"""
Created on Mon Nov  6 18:46:30 2023

@author: LENOVO
"""
import pandas as pd
from scipy.interpolate import lagrange

missing_data = pd.read_excel('数据分析2数据/missing_data.xls')
print('插值前的数据：\n', missing_data)

print('missing_data每个特征缺失的数目为：\n', missing_data.isnull().sum())

#定义拉格朗日插值函数
def lagrange_function(series):
    missing_idx = series[series.isnull()].index
    if len(missing_idx) == 0:
    #没有缺失值，不执行插值
        return series
    else:
    #获取非缺失值的索引和对应的值
        non_missing_idx = series.dropna().index
        non_missing_values = series.dropna().values
    #创建拉格朗日插值函数
        lagrange_interpolator = lagrange(non_missing_idx, non_missing_values)
    #对缺失值进行插值
        interpolated_values = lagrange_interpolator(missing_idx)
    #更新原始数据中的缺失值
        series[missing_idx] = interpolated_values
        return series
#对每列进行拉格朗日插值
for col in missing_data.columns:
    missing_data[col] = lagrange_function(missing_data[col])

#查询缺失值所在位置
print('missing_data每个特征缺失的数目为：\n',missing_data.isnull().sum())

#判断是否插值成功
if missing_data.isnull().sum().sum() == 0:
    print('插值成功')
else:
    print('插值未成功，仍存在缺失值')

#打印新数据
print('插值后的数据：\n', missing_data)

ele_loss=pd.read_csv("数据分析2数据/ele_loss.csv")
alarm=pd.read_csv("数据分析2数据/alarm.csv", encoding='gbk')

#查看两个表的形状
print("ele_loss表的形状为",ele_loss.shape)
print("alarm表的形状为",alarm.shape)

#合并后的数据
merge=pd.merge(ele_loss,alarm,left_on=["ID","date"],right_on=["ID","date"],how="inner")
print("合并后的表形状为：",merge.shape)
print("合并后的表为:\n",merge)

#离差标准化
model=pd.read_excel("数据分析2数据/model.xls")
def MinMaxScale(data):
    data=(data-data.min())/(data.max()-data.min())
    return data
M=MinMaxScale(model)
print("离差标准化后的数据为：",'\n',M.head())
